//字符串转化后的各位数字之和
/*给你一个由小写字母组成的字符串 s ，以及一个整数 k 。你的任务是通过一种特殊处理将字符串转为整数，然后通过重复对它的数位求和 k 次来进行转换。更具体地说，执行以下步骤：

用字母在字母表中的位置 替换 该字母，将 s 转化 为一个整数（也就是，'a' 用 1 替换，'b' 用 2 替换，... 'z' 用 26 替换）。
接着，将整数 转换 为其 各位数字之和 。
共重复 转换 操作（第 2 步） k 次 。
例如，如果 s = "zbax" 且 k = 2 ，那么执行下述步骤后得到的结果是整数 8 ：

转化："zbax" ➝ "(26)(2)(1)(24)" ➝ "262124" ➝ 262124
转换 #1：262124 ➝ 2 + 6 + 2 + 1 + 2 + 4 ➝ 17
转换 #2：17 ➝ 1 + 7 ➝ 8
返回执行上述 操作 后得到的 结果整数。*/
class Solution {
public:
    int getLucky(string s, int k) {
        unordered_map<char, int> map;
        for (int i = 1; i <= 26; i++) {
            map['a' - 1 + i] = i;
        }
        string temp;
        for (auto& c : s) {
            int add = map[c];
            temp += to_string(add);
        }
        int ret;
        for (int i = 0; i < k; i++) {
           // cout << temp << endl;
            ret = 0;
            for (auto& c : temp) {
                ret += c - '0';
            }
            temp = to_string(ret);
        }
        return ret;
    }
};


//数组中不等三元组的数目
/*给你一个下标从 0 开始的正整数数组 nums 。请你找出并统计满足下述条件的三元组 (i, j, k) 的数目：

0 <= i < j < k < nums.length
nums[i]、nums[j] 和 nums[k] 两两不同 。
换句话说：nums[i] != nums[j]、nums[i] != nums[k] 且 nums[j] != nums[k] 。
返回满足上述条件三元组的数目*/
class Solution {
public:
    int unequalTriplets(vector<int>& nums) {
        sort(nums.begin(), nums.end());
        int ret = 0, n = nums.size();
        for (int i = 0, j = 0; i < n; i = j) {
            while (j < n && nums[j] == nums[i]) {
                j++;
            }
            ret += i * (j - i) * (n - j);
        }
        return ret;
    }
};